package com.TestDemo.Test202203To04;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.time.chrono.MinguoDate;
import java.util.LinkedList;
import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2022/03/29/10:54
 * @Description:
 * @Target:
 */
public class countTest {


    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println(partCount(in.readLine()));
    }
    // 3+2*{1+2*[-4/(8-6)+7]}
    // 保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’， ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。
   // 最难的就是括号的处理，可以把括住的部分转换为加法运算，这样到了下一个括号时，不段加就行。
    // 第一步,条件有--前括号,后括号,数字,运算符.    计算问题,如果+-*/,那么就将计算好的结果存入,
    static int index;  // 全局只跑一次
    static int partCount(String ss){
        // 我需要一个index,跑字符串的下标,考虑整个程序我只会跑一次,遇到括号就正常跑,并不会跑完再重复跑,所以定一个类变量
        int sum = 0;
        Stack<Integer> stack = new Stack();  // 存放数字
        int num = 0;
        char pos = '+';  // 运算符,每次进来初始为+

        while (index<ss.length()){

            // 条件1,前括号
            if(ss.charAt(index) == '{' || ss.charAt(index) == '[' || ss.charAt(index) == '('){
                // 直接进入递归,让他内部计算
                index++;   // 既然是括号就不参与运算,++跳过.
                num = partCount(ss);
            }


            // 条件3,数字
            while (index<ss.length()&&Character.isDigit(ss.charAt(index))){
                // 数字可能有多位,而index是一位位计算的,
                num = num * 10 + (ss.charAt(index)-'0');
                index++;
            }


            // 运算符,且要进行运算.默认运算符为+
            switch (pos){
                case '+':
                    stack.push(num);
                    break;
                //- 号的时候变成负数
                case '-':
                    stack.push(-num);
                    break;
                //乘号的时候出栈先做乘法运算后把得到的结果 再入栈
                case '*':
                    stack.push(stack.pop()*num);
                    break;
                //同上面的乘号
                case '/':
                    stack.push(stack.pop()/num);
                    break;
            }

            num = 0;

            if (index<ss.length()){
                pos = ss.charAt(index);
                // 条件2,后括号
                if(ss.charAt(index) == '}' || ss.charAt(index) == ']' || ss.charAt(index) == ')'){
                    index++;  // 跳过,同时跳出循环.
                    break;
                }
            }


            index++;


        }


        while (!stack.empty()){
            sum += stack.pop();
        }
        return sum;
    }
}
